package com.whfc.iot.fse.crane.codec;

import com.whfc.common.util.MathUtil;
import com.whfc.iot.fse.crane.entity.TwMsgRealData;
import com.whfc.iot.util.MsgDataCodecUtil;
import io.netty.buffer.ByteBuf;

import java.util.Date;

public class TwMsgDataCodecRealData implements TwMsgDataCodec<TwMsgRealData>{
    @Override
    public void decode(ByteBuf buf, TwMsgRealData msg) {
        // 版本号
        int version = buf.readUnsignedByte();
        // 读取硬件时间
        Date deviceTime = MsgDataCodecUtil.readDateTime(buf);
        // 厂家及设备类型
        int equipmentType = buf.readUnsignedByte();
        // 高度
        int height = buf.readUnsignedShort();
        // 幅度
        int margin = buf.readUnsignedShort();
        // 回转
        int rotation = buf.readUnsignedShort();
        // 起重量数据
        int weight = buf.readUnsignedShort();
        // 风速
        int windSpeed = buf.readUnsignedShort();
        // 倾角
        int dip = buf.readUnsignedShort();
        // 重量百分比
        int weightPercent= buf.readUnsignedByte();
        // 力矩百分比
        int momentalPercent= buf.readUnsignedByte();
        // 风速百分比
        int windSpeedPercent= buf.readUnsignedByte();
        // 倾斜百分比
        int dipPercent = buf.readUnsignedByte();
        // 警报原因 0未报警
        int alarmState = buf.readUnsignedByte();
        // 制动状态 0未制动
        int brakingState = buf.readUnsignedByte();

        msg.setVersion(version);
        msg.setDeviceTime(deviceTime);
        msg.setEquipmentType(equipmentType);
        msg.setHeight(MathUtil.round(0.1*height,1));
        msg.setMargin(MathUtil.round(0.1*margin,1));
        msg.setRotation(MathUtil.round(0.1*rotation,1));
        msg.setWeight(MathUtil.round(0.001*weight,3));
        msg.setWindSpeed(MathUtil.round(0.1*windSpeed,1));
        msg.setDip(MathUtil.round(0.01*(dip-1500),2));
        msg.setWeightPercent(1.0*weightPercent);
        msg.setMomentPercent(1.0*momentalPercent);
        msg.setWindSpeedPercent(1.0*windSpeedPercent);
        msg.setDip(1.0*dipPercent);
        msg.setAlarmState(alarmState);
        msg.setBrakingState(brakingState);
    }

    public static void main(String[] args) {
        /**
         * A5 5A
         * 0C
         * 01
         * BC 61 48
         * =========   数据
         * 01                        版本号
         * 14 0A 0F 10 02 32         时间（6byte年月日时分秒)
         * 11                        厂家及设备类型（1byte）
         * 00 41                     高度数据(2byte)
         * 00 62                     幅度数据(2byte)
         * 08 01                     回转(2byte)
         * 00 0D                     起重量数据(2byte)
         * 00 00                     风速数据(2byte)
         * 05 E4                     倾角数据(2byte)
         * 00                        重量百分比（1byte）
         * 00                        力矩百分比（1byte）
         * 00                        风速百分比（1byte）
         * 00                        倾斜百分比(1byte)
         * 00                        警报原因(1byte)
         * 00                        制动状态（1byte）
         * =========
         * 96 21 CC 33 C3 3C
         */
        System.out.println(0x11+"=========厂家及设备类型");
        System.out.println(0x0041+"=============高度数据");
        System.out.println(0x0062+"=============幅度数据");
        System.out.println(0x0801+"=============回转");
        System.out.println(0x000D+"=============起重量数据");
        System.out.println(0x0000+"=============风速数据");
        System.out.println(0x05E4+"=============倾角数据");
        System.out.println(0x00);
        System.out.println(0x00);
        System.out.println(0x00);
        System.out.println(0x00);
        System.out.println(0x00);
        System.out.println(0x00);
    }
}
